home *** CD-ROM | disk | FTP | other *** search
/ 9-Digit Zip Code Directory / 9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO / z4src.zip / DISPATCH.H < prev    next >
C/C++ Source or Header  |  1993-11-16  |  39KB  |  1,252 lines

  1. /*** 
  2. *dispatch.h - OLE Automation definitions.
  3. *
  4. *  Copyright (C) 1992-1993, Microsoft Corporation.  All Rights Reserved.
  5. *
  6. *Purpose:
  7. *  This file defines the Ole Automation interfaces and APIs.
  8. *
  9. *Implementation Notes:
  10. *  This file requires ole2.h
  11. *
  12. *****************************************************************************/
  13.  
  14. #ifndef _DISPATCH_H_
  15. #define _DISPATCH_H_
  16.  
  17. #include "variant.h"
  18.  
  19. #ifndef BEGIN_INTERFACE
  20. # define BEGIN_INTERFACE
  21. #endif
  22.  
  23. #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_MSC_VER))
  24. # define UNION_NAME(X) X
  25. #else
  26. # define UNION_NAME(X)
  27. #endif
  28.  
  29.  
  30. DEFINE_OLEGUID(IID_IDispatch,        0x00020400L, 0, 0);
  31. DEFINE_OLEGUID(IID_IEnumVARIANT,    0x00020404L, 0, 0);
  32. DEFINE_OLEGUID(IID_ITypeInfo,        0x00020401L, 0, 0);
  33. DEFINE_OLEGUID(IID_ITypeLib,        0x00020402L, 0, 0);
  34. DEFINE_OLEGUID(IID_ITypeComp,        0x00020403L, 0, 0);
  35. DEFINE_OLEGUID(IID_ICreateTypeInfo,    0x00020405L, 0, 0);
  36. DEFINE_OLEGUID(IID_ICreateTypeLib,    0x00020406L, 0, 0);
  37. DEFINE_OLEGUID(IID_StdOle,        0x00020430L, 0, 0);
  38.  
  39.  
  40. /* forward declarations */
  41. #ifdef __cplusplus
  42.  
  43.   interface IDispatch;
  44.   interface IEnumVARIANT;
  45.   interface ITypeInfo;
  46.   interface ITypeLib;
  47.   interface ITypeComp;
  48.   interface ICreateTypeInfo;
  49.   interface ICreateTypeLib;
  50.   
  51. #else
  52.  
  53.   typedef interface IDispatch IDispatch;
  54.   typedef interface IEnumVARIANT IEnumVARIANT;
  55.   typedef interface ITypeInfo ITypeInfo;
  56.   typedef interface ITypeLib ITypeLib;
  57.   typedef interface ITypeComp ITypeComp;
  58.   typedef interface ICreateTypeInfo ICreateTypeInfo;
  59.   typedef interface ICreateTypeLib ICreateTypeLib;
  60.   
  61. #endif
  62.  
  63.  
  64. /* IDispatch related error codes */
  65.  
  66. #define DISP_ERROR(X) MAKE_SCODE(SEVERITY_ERROR, FACILITY_DISPATCH, X)
  67.  
  68. #define DISP_E_UNKNOWNINTERFACE        DISP_ERROR(1)
  69. #define DISP_E_MEMBERNOTFOUND        DISP_ERROR(3)
  70. #define DISP_E_PARAMNOTFOUND        DISP_ERROR(4)
  71. #define DISP_E_TYPEMISMATCH        DISP_ERROR(5)
  72. #define DISP_E_UNKNOWNNAME        DISP_ERROR(6)
  73. #define DISP_E_NONAMEDARGS        DISP_ERROR(7)
  74. #define DISP_E_BADVARTYPE        DISP_ERROR(8)
  75. #define DISP_E_EXCEPTION        DISP_ERROR(9)
  76. #define DISP_E_OVERFLOW            DISP_ERROR(10)
  77. #define DISP_E_BADINDEX            DISP_ERROR(11)
  78. #define DISP_E_UNKNOWNLCID        DISP_ERROR(12)
  79. #define DISP_E_ARRAYISLOCKED        DISP_ERROR(13)
  80. #define DISP_E_BADPARAMCOUNT        DISP_ERROR(14)
  81. #define DISP_E_PARAMNOTOPTIONAL        DISP_ERROR(15)
  82. #define DISP_E_BADCALLEE        DISP_ERROR(16)
  83. #define DISP_E_NOTACOLLECTION        DISP_ERROR(17)
  84.  
  85.  
  86. #define TYPE_ERROR(X) MAKE_SCODE(SEVERITY_ERROR, FACILITY_DISPATCH, X)
  87.  
  88. #define TYPE_E_BUFFERTOOSMALL        TYPE_ERROR(32790)
  89. #define TYPE_E_INVDATAREAD        TYPE_ERROR(32792)
  90. #define TYPE_E_UNSUPFORMAT        TYPE_ERROR(32793)
  91. #define TYPE_E_REGISTRYACCESS        TYPE_ERROR(32796)
  92. #define TYPE_E_LIBNOTREGISTERED     TYPE_ERROR(32797)
  93. #define TYPE_E_UNDEFINEDTYPE        TYPE_ERROR(32807)
  94. #define TYPE_E_QUALIFIEDNAMEDISALLOWED    TYPE_ERROR(32808)
  95. #define TYPE_E_INVALIDSTATE        TYPE_ERROR(32809)
  96. #define TYPE_E_WRONGTYPEKIND        TYPE_ERROR(32810)
  97. #define TYPE_E_ELEMENTNOTFOUND        TYPE_ERROR(32811)
  98. #define TYPE_E_AMBIGUOUSNAME        TYPE_ERROR(32812)
  99. #define TYPE_E_NAMECONFLICT        TYPE_ERROR(32813)
  100. #define TYPE_E_UNKNOWNLCID        TYPE_ERROR(32814)
  101. #define TYPE_E_DLLFUNCTIONNOTFOUND    TYPE_ERROR(32815)
  102. #define TYPE_E_BADMODULEKIND        TYPE_ERROR(35005)
  103. #define TYPE_E_SIZETOOBIG        TYPE_ERROR(35013)
  104. #define TYPE_E_DUPLICATEID        TYPE_ERROR(35014)
  105. #define TYPE_E_TYPEMISMATCH        TYPE_ERROR(36000)
  106. #define TYPE_E_OUTOFBOUNDS        TYPE_ERROR(36001)
  107. #define TYPE_E_IOERROR            TYPE_ERROR(36002)
  108. #define TYPE_E_CANTCREATETMPFILE    TYPE_ERROR(36003)
  109. #define TYPE_E_CANTLOADLIBRARY        TYPE_ERROR(40010)
  110. #define TYPE_E_INCONSISTENTPROPFUNCS    TYPE_ERROR(40067)
  111. #define TYPE_E_CIRCULARTYPE        TYPE_ERROR(40068)
  112.  
  113.  
  114. /* if not already picked up from olenls.h */
  115. #ifndef _LCID_DEFINED
  116. typedef unsigned long LCID;
  117. # define _LCID_DEFINED
  118. #endif
  119.  
  120.  
  121.  
  122. /*---------------------------------------------------------------------*/
  123. /*                            BSTR API                                 */
  124. /*---------------------------------------------------------------------*/
  125.  
  126. STDAPI_(BSTR) SysAllocString(const TCHAR FAR*);
  127. STDAPI_(int)  SysReAllocString(BSTR FAR*, const TCHAR FAR*);
  128. STDAPI_(BSTR) SysAllocStringLen(const TCHAR FAR*, unsigned int);
  129. STDAPI_(int)  SysReAllocStringLen(BSTR FAR*, const TCHAR FAR*, unsigned int);
  130. STDAPI_(void) SysFreeString(BSTR);  
  131. STDAPI_(unsigned int) SysStringLen(BSTR);
  132.  
  133.  
  134.   
  135. /*---------------------------------------------------------------------*/
  136. /*                            Time API                                 */
  137. /*---------------------------------------------------------------------*/
  138.  
  139. STDAPI_(int)
  140. DosDateTimeToVariantTime(
  141.     unsigned short wDosDate,
  142.     unsigned short wDosTime,
  143.     double FAR* pvtime);
  144.  
  145. STDAPI_(int)
  146. VariantTimeToDosDateTime(
  147.     double vtime,
  148.     unsigned short FAR* pwDosDate,
  149.     unsigned short FAR* pwDosTime);
  150.  
  151.  
  152. /*---------------------------------------------------------------------*/
  153. /*                          SafeArray API                              */
  154. /*---------------------------------------------------------------------*/
  155.  
  156. STDAPI
  157. SafeArrayAllocDescriptor(unsigned int cDims, SAFEARRAY FAR* FAR* ppsaOut);
  158.  
  159. STDAPI SafeArrayAllocData(SAFEARRAY FAR* psa);
  160.  
  161. STDAPI_(SAFEARRAY FAR*)
  162. SafeArrayCreate(
  163.     VARTYPE vt,
  164.     unsigned int cDims,
  165.     SAFEARRAYBOUND FAR* rgsabound);
  166.  
  167. STDAPI SafeArrayDestroyDescriptor(SAFEARRAY FAR* psa);
  168.  
  169. STDAPI SafeArrayDestroyData(SAFEARRAY FAR* psa);
  170.  
  171. STDAPI SafeArrayDestroy(SAFEARRAY FAR* psa);
  172.  
  173. STDAPI SafeArrayRedim(SAFEARRAY FAR* psa, SAFEARRAYBOUND FAR* psaboundNew);
  174.  
  175. STDAPI_(unsigned int) SafeArrayGetDim(SAFEARRAY FAR* psa);
  176.  
  177. STDAPI_(unsigned int) SafeArrayGetElemsize(SAFEARRAY FAR* psa);
  178.  
  179. STDAPI
  180. SafeArrayGetUBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plUbound);
  181.  
  182. STDAPI
  183. SafeArrayGetLBound(SAFEARRAY FAR* psa, unsigned int nDim, long FAR* plLbound);
  184.  
  185. STDAPI SafeArrayLock(SAFEARRAY FAR* psa);
  186.  
  187. STDAPI SafeArrayUnlock(SAFEARRAY FAR* psa);
  188.  
  189. STDAPI SafeArrayAccessData(SAFEARRAY FAR* psa, void HUGEP* FAR* ppvData);
  190.  
  191. STDAPI SafeArrayUnaccessData(SAFEARRAY FAR* psa);
  192.  
  193. STDAPI
  194. SafeArrayGetElement(
  195.     SAFEARRAY FAR* psa,
  196.     long FAR* rgIndices,
  197.     void FAR* pv);
  198.  
  199. STDAPI
  200. SafeArrayPutElement(
  201.     SAFEARRAY FAR* psa,
  202.     long FAR* rgIndices,
  203.     void FAR* pv);
  204.  
  205. STDAPI
  206. SafeArrayCopy(
  207.     SAFEARRAY FAR* psa,
  208.     SAFEARRAY FAR* FAR* ppsaOut);
  209.  
  210.  
  211. /*---------------------------------------------------------------------*/
  212. /*                           VARIANT API                               */
  213. /*---------------------------------------------------------------------*/
  214.  
  215. STDAPI_(void)
  216. VariantInit(VARIANTARG FAR* pvarg);
  217.  
  218. STDAPI
  219. VariantClear(VARIANTARG FAR* pvarg);
  220.  
  221. STDAPI
  222. VariantCopy(
  223.     VARIANTARG FAR* pvargDest,
  224.     VARIANTARG FAR* pvargSrc);
  225.  
  226. STDAPI
  227. VariantCopyInd(
  228.     VARIANT FAR* pvarDest,
  229.     VARIANTARG FAR* pvargSrc);
  230.  
  231. STDAPI
  232. VariantChangeType(
  233.     VARIANTARG FAR* pvargDest,
  234.     VARIANTARG FAR* pvarSrc,
  235.     unsigned short wFlags,
  236.     VARTYPE vt);
  237.  
  238. STDAPI
  239. VariantChangeTypeEx(
  240.     VARIANTARG FAR* pvargDest,
  241.     VARIANTARG FAR* pvarSrc,
  242.     LCID lcid,        
  243.     unsigned short wFlags,
  244.     VARTYPE vt);
  245.  
  246. #define VARIANT_NOVALUEPROP 1
  247.  
  248.  
  249. /*---------------------------------------------------------------------*/
  250. /*                     VARTYPE Coercion API                            */
  251. /*---------------------------------------------------------------------*/
  252.  
  253. /* Note: The routines that convert *from* a string are defined
  254.  * to take a char* rather than a BSTR because no allocation is
  255.  * required, and this makes the routines a bit more generic.
  256.  * They may of course still be passed a BSTR as the strIn param.
  257.  */
  258.  
  259. /* Mac Note: Due to a bug in the MPW C compiler having to do with
  260.  * passing floats by value, all of the Var*FromR4 routines take
  261.  * the fltIn param as a double instead of a float on the mac.
  262.  */
  263.  
  264. /* Any of the coersion functions that converts either from or to a string
  265.  * takes an additional lcid and dwFlags arguments. The lcid argument allows
  266.  * locale specific parsing to occur.  The dwFlags allow additional function
  267.  * specific condition to occur.  All function that accept the dwFlags argument
  268.  * can include either 0 or LOCALE_NOUSEROVERRIDE flag. In addition, the
  269.  * VarDateFromStr functions also accepts the VAR_TIMEVALUEONLY and 
  270.  * VAR_DATEVALUEONLY flags
  271.  */     
  272.  
  273. #define VAR_TIMEVALUEONLY            0x0001    /* return time value */
  274. #define VAR_DATEVALUEONLY            0x0002    /* return date value */
  275.  
  276.    
  277. STDAPI VarI2FromI4(long lIn, short FAR* psOut);
  278. #ifdef _MAC
  279. STDAPI VarI2FromR4(double fltIn, short FAR* psOut);
  280. #else
  281. STDAPI VarI2FromR4(float fltIn, short FAR* psOut);
  282. #endif
  283. STDAPI VarI2FromR8(double dblIn, short FAR* psOut);
  284. STDAPI VarI2FromCy(CY cyIn, short FAR* psOut);
  285. STDAPI VarI2FromDate(DATE dateIn, short FAR* psOut);
  286. STDAPI VarI2FromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, short FAR* psOut);
  287. STDAPI VarI2FromDisp(IDispatch FAR* pdispIn, LCID lcid, short FAR* psOut);
  288. STDAPI VarI2FromBool(VARIANT_BOOL boolIn, short FAR* psOut);
  289.  
  290. STDAPI VarI4FromI2(short sIn, long FAR* plOut);
  291. #ifdef _MAC
  292. STDAPI VarI4FromR4(double fltIn, long FAR* plOut);
  293. #else
  294. STDAPI VarI4FromR4(float fltIn, long FAR* plOut);
  295. #endif
  296. STDAPI VarI4FromR8(double dblIn, long FAR* plOut);
  297. STDAPI VarI4FromCy(CY cyIn, long FAR* plOut);
  298. STDAPI VarI4FromDate(DATE dateIn, long FAR* plOut);
  299. STDAPI VarI4FromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, long FAR* plOut);
  300. STDAPI VarI4FromDisp(IDispatch FAR* pdispIn, LCID lcid, long FAR* plOut);
  301. STDAPI VarI4FromBool(VARIANT_BOOL boolIn, long FAR* plOut);
  302.  
  303. STDAPI VarR4FromI2(short sIn, float FAR* pfltOut);
  304. STDAPI VarR4FromI4(long lIn, float FAR* pfltOut);
  305. STDAPI VarR4FromR8(double dblIn, float FAR* pfltOut);
  306. STDAPI VarR4FromCy(CY cyIn, float FAR* pfltOut);
  307. STDAPI VarR4FromDate(DATE dateIn, float FAR* pfltOut);
  308. STDAPI VarR4FromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, float FAR* pfltOut);
  309. STDAPI VarR4FromDisp(IDispatch FAR* pdispIn, LCID lcid, float FAR* pfltOut);
  310. STDAPI VarR4FromBool(VARIANT_BOOL boolIn, float FAR* pfltOut);
  311.  
  312. STDAPI VarR8FromI2(short sIn, double FAR* pdblOut);
  313. STDAPI VarR8FromI4(long lIn, double FAR* pdblOut);
  314. #ifdef _MAC
  315. STDAPI VarR8FromR4(double fltIn, double FAR* pdblOut);
  316. #else
  317. STDAPI VarR8FromR4(float fltIn, double FAR* pdblOut);
  318. #endif
  319. STDAPI VarR8FromCy(CY cyIn, double FAR* pdblOut);
  320. STDAPI VarR8FromDate(DATE dateIn, double FAR* pdblOut);
  321. STDAPI VarR8FromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, double FAR* pdblOut);
  322. STDAPI VarR8FromDisp(IDispatch FAR* pdispIn, LCID lcid, double FAR* pdblOut);
  323. STDAPI VarR8FromBool(VARIANT_BOOL boolIn, double FAR* pdblOut);
  324.  
  325. STDAPI VarDateFromI2(short sIn, DATE FAR* pdateOut);
  326. STDAPI VarDateFromI4(long lIn, DATE FAR* pdateOut);
  327. #ifdef _MAC
  328. STDAPI VarDateFromR4(double fltIn, DATE FAR* pdateOut);
  329. #else
  330. STDAPI VarDateFromR4(float fltIn, DATE FAR* pdateOut);
  331. #endif
  332. STDAPI VarDateFromR8(double dblIn, DATE FAR* pdateOut);
  333. STDAPI VarDateFromCy(CY cyIn, DATE FAR* pdateOut);
  334. STDAPI VarDateFromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, DATE FAR* pdateOut);
  335. STDAPI VarDateFromDisp(IDispatch FAR* pdispIn, LCID lcid, DATE FAR* pdateOut);
  336. STDAPI VarDateFromBool(VARIANT_BOOL boolIn, DATE FAR* pdateOut);
  337.  
  338. STDAPI VarCyFromI2(short sIn, CY FAR* pcyOut);
  339. STDAPI VarCyFromI4(long lIn, CY FAR* pcyOut);
  340. #ifdef _MAC
  341. STDAPI VarCyFromR4(double fltIn, CY FAR* pcyOut);
  342. #else
  343. STDAPI VarCyFromR4(float fltIn, CY FAR* pcyOut);
  344. #endif
  345. STDAPI VarCyFromR8(double dblIn, CY FAR* pcyOut);
  346. STDAPI VarCyFromDate(DATE dateIn, CY FAR* pcyOut);
  347. STDAPI VarCyFromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, CY FAR* pcyOut);
  348. STDAPI VarCyFromDisp(IDispatch FAR* pdispIn, LCID lcid, CY FAR* pcyOut);
  349. STDAPI VarCyFromBool(VARIANT_BOOL boolIn, CY FAR* pcyOut);
  350.  
  351. STDAPI VarBstrFromI2(short iVal, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  352. STDAPI VarBstrFromI4(long lIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  353. #ifdef _MAC
  354. STDAPI VarBstrFromR4(double fltIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  355. #else
  356. STDAPI VarBstrFromR4(float fltIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  357. #endif
  358. STDAPI VarBstrFromR8(double dblIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  359. STDAPI VarBstrFromCy(CY cyIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  360. STDAPI VarBstrFromDate(DATE dateIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  361. STDAPI VarBstrFromDisp(IDispatch FAR* pdispIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  362. STDAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, unsigned long dwFlags, BSTR FAR* pbstrOut);
  363.  
  364. STDAPI VarBoolFromI2(short sIn, VARIANT_BOOL FAR* pboolOut);
  365. STDAPI VarBoolFromI4(long lIn, VARIANT_BOOL FAR* pboolOut);
  366. #ifdef _MAC
  367. STDAPI VarBoolFromR4(double fltIn, VARIANT_BOOL FAR* pboolOut);
  368. #else
  369. STDAPI VarBoolFromR4(float fltIn, VARIANT_BOOL FAR* pboolOut);
  370. #endif
  371. STDAPI VarBoolFromR8(double dblIn, VARIANT_BOOL FAR* pboolOut);
  372. STDAPI VarBoolFromDate(DATE dateIn, VARIANT_BOOL FAR* pboolOut);
  373. STDAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL FAR* pboolOut);
  374. STDAPI VarBoolFromStr(TCHAR FAR* strIn, LCID lcid, unsigned long dwFlags, VARIANT_BOOL FAR* pboolOut);
  375. STDAPI VarBoolFromDisp(IDispatch FAR* pdispIn, LCID lcid, VARIANT_BOOL FAR* pboolOut);
  376.  
  377.  
  378.  
  379. /*---------------------------------------------------------------------*/
  380. /*                             ITypeLib                                */
  381. /*---------------------------------------------------------------------*/
  382.  
  383.  
  384. typedef long DISPID;
  385. typedef DISPID MEMBERID;
  386.  
  387. #define MEMBERID_NIL DISPID_UNKNOWN
  388. #define ID_DEFAULTINST  -2
  389.  
  390. typedef enum tagSYSKIND {
  391.       SYS_WIN16
  392.     , SYS_WIN32
  393.     , SYS_MAC
  394. #ifdef _MAC
  395.     , SYS_FORCELONG = 2147483647
  396. #endif
  397. } SYSKIND;
  398.  
  399. typedef enum tagLIBFLAGS {
  400.       LIBFLAG_FRESTRICTED = 1
  401. #ifdef _MAC
  402.     , LIBFLAG_FORCELONG  = 2147483647
  403. #endif
  404. } LIBFLAGS;
  405.  
  406. typedef struct FARSTRUCT tagTLIBATTR {
  407.     GUID guid;            /* globally unique library id */
  408.     LCID lcid;            /* locale of the TypeLibrary */
  409.     SYSKIND syskind;
  410.     unsigned short wMajorVerNum;/* major version number    */
  411.     unsigned short wMinorVerNum;/* minor version number    */
  412.     unsigned short wLibFlags;    /* library flags */
  413. } TLIBATTR, FAR* LPTLIBATTR;
  414.  
  415. typedef enum tagTYPEKIND {
  416.       TKIND_ENUM = 0
  417.     , TKIND_RECORD
  418.     , TKIND_MODULE
  419.     , TKIND_INTERFACE
  420.     , TKIND_DISPATCH
  421.     , TKIND_COCLASS
  422.     , TKIND_ALIAS
  423.     , TKIND_UNION
  424.     , TKIND_MAX            /* end of enum marker */
  425. #ifdef _MAC
  426.     , TKIND_FORCELONG = 2147483647
  427. #endif
  428. } TYPEKIND;
  429.  
  430. #undef  INTERFACE
  431. #define INTERFACE ITypeLib
  432.  
  433. DECLARE_INTERFACE_(ITypeLib, IUnknown)
  434. {
  435.     BEGIN_INTERFACE
  436.  
  437.     /* IUnknown methods */
  438.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  439.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  440.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  441.  
  442.     /* ITypeLib methods */
  443.     STDMETHOD_(unsigned int,GetTypeInfoCount)(THIS) PURE;
  444.  
  445.     STDMETHOD(GetTypeInfo)(THIS_
  446.       unsigned int index, ITypeInfo FAR* FAR* pptinfo) PURE;
  447.  
  448.     STDMETHOD(GetTypeInfoType)(THIS_
  449.       unsigned int index, TYPEKIND FAR* ptypekind) PURE;
  450.  
  451.     STDMETHOD(GetTypeInfoOfGuid)(THIS_
  452.       REFGUID guid, ITypeInfo FAR* FAR* pptinfo) PURE;
  453.  
  454.     STDMETHOD(GetLibAttr)(THIS_
  455.       TLIBATTR FAR* FAR* pptlibattr) PURE;
  456.  
  457.     STDMETHOD(GetTypeComp)(THIS_
  458.       ITypeComp FAR* FAR* pptcomp) PURE;
  459.  
  460.     STDMETHOD(GetDocumentation)(THIS_
  461.       int index,
  462.       BSTR FAR* pbstrName,
  463.       BSTR FAR* pbstrDocString,
  464.       unsigned long FAR* pdwHelpContext,
  465.       BSTR FAR* pbstrHelpFile) PURE;
  466.  
  467.     STDMETHOD(IsName)(THIS_ 
  468.       TCHAR FAR* szNameBuf,
  469.       unsigned long lHashVal,
  470.       int FAR* lpfName) PURE;
  471.  
  472.     STDMETHOD(FindName)(THIS_
  473.       TCHAR FAR* szNameBuf,
  474.       unsigned long lHashVal,
  475.       ITypeInfo FAR* FAR* rgptinfo,
  476.       MEMBERID FAR* rgmemid,
  477.       unsigned short FAR* pcFound) PURE;
  478.  
  479.     STDMETHOD_(void, ReleaseTLibAttr)(THIS_ TLIBATTR FAR* ptlibattr) PURE;
  480. };
  481.  
  482. typedef ITypeLib FAR* LPTYPELIB;
  483.  
  484.  
  485.  
  486. /*---------------------------------------------------------------------*/
  487. /*                            ITypeInfo                                */
  488. /*---------------------------------------------------------------------*/
  489.  
  490. typedef unsigned long HREFTYPE;
  491.  
  492.  
  493. typedef struct FARSTRUCT tagTYPEDESC {
  494.     union {
  495.       /* VT_PTR - the pointed-at type */
  496.       struct FARSTRUCT tagTYPEDESC FAR* lptdesc;
  497.  
  498.       /* VT_CARRAY */
  499.       struct FARSTRUCT tagARRAYDESC FAR* lpadesc;
  500.  
  501.       /* VT_USERDEFINED - this is used to get a TypeInfo for the UDT */
  502.       HREFTYPE hreftype;
  503.  
  504.     }UNION_NAME(u);
  505.     VARTYPE vt;
  506. } TYPEDESC;
  507.  
  508. typedef struct FARSTRUCT tagARRAYDESC {
  509.     TYPEDESC tdescElem;        /* element type */
  510.     unsigned short cDims;    /* dimension count */
  511.     SAFEARRAYBOUND rgbounds[1];    /* variable length array of bounds */
  512. } ARRAYDESC;
  513.  
  514. typedef struct FARSTRUCT tagIDLDESC {
  515.     BSTR bstrIDLInfo;
  516.     unsigned short wIDLFlags;    /* IN, OUT, etc */
  517. } IDLDESC, FAR* LPIDLDESC;
  518.  
  519.  
  520. #define IDLFLAG_NONE    0
  521. #define IDLFLAG_FIN    0x1
  522. #define IDLFLAG_FOUT    0x2
  523.  
  524. typedef struct FARSTRUCT tagELEMDESC {
  525.     TYPEDESC tdesc;        /* the type of the element */
  526.     IDLDESC idldesc;        /* info for remoting the element */ 
  527. } ELEMDESC, FAR* LPELEMDESC;
  528.  
  529.  
  530. typedef struct FARSTRUCT tagTYPEATTR {
  531.     GUID guid;            /* the GUID of the TypeInfo */
  532.     LCID lcid;            /* locale of member names and doc strings */
  533.     unsigned long dwReserved;
  534.     MEMBERID memidConstructor;    /* ID of constructor, MEMBERID_NIL if none */
  535.     MEMBERID memidDestructor;    /* ID of destructor, MEMBERID_NIL if none */
  536.     TCHAR FAR* lpstrSchema;    /* reserved for future use */
  537.     unsigned long cbSizeInstance;/* the size of an instance of this type */
  538.     TYPEKIND typekind;        /* the kind of type this typeinfo describes */
  539.     unsigned short cFuncs;    /* number of functions */
  540.     unsigned short cVars;    /* number of variables / data members */
  541.     unsigned short cImplTypes;    /* number of implemented interfaces */
  542.     unsigned short cbSizeVft;    /* the size of this types virtual func table */
  543.     unsigned short cbAlignment;    /* the alignment for an instance of this type */
  544.     unsigned short wTypeFlags;
  545.     unsigned short wMajorVerNum;/* major version number */
  546.     unsigned short wMinorVerNum;/* minor version number */
  547.     TYPEDESC tdescAlias;    /* if typekind == TKIND_ALIAS this specifies
  548.                    the type for which this type is an alias */
  549.     IDLDESC idldescType;        /* IDL attributes of the described type */
  550. } TYPEATTR, FAR* LPTYPEATTR;
  551.  
  552. typedef struct FARSTRUCT tagDISPPARAMS{
  553.     VARIANTARG FAR* rgvarg;
  554.     DISPID FAR* rgdispidNamedArgs;
  555.     unsigned int cArgs;
  556.     unsigned int cNamedArgs;
  557. } DISPPARAMS;
  558.  
  559. typedef struct FARSTRUCT tagEXCEPINFO {
  560.     unsigned short wCode;             /* An error code describing the error. */
  561.                       /* Either (but not both) the wCode or */
  562.                       /* scode fields must be set */
  563.     unsigned short wReserved;
  564.  
  565.     BSTR bstrSource;        /* A textual, human readable name of the
  566.                    source of the exception. It is up to the
  567.                    IDispatch implementor to fill this in.
  568.                    Typically this will be an application name. */
  569.  
  570.     BSTR bstrDescription;   /* A textual, human readable description of the
  571.                    error. If no description is available, NULL
  572.                    should be used. */
  573.  
  574.     BSTR bstrHelpFile;      /* Fully qualified drive, path, and file name
  575.                    of a help file with more information about
  576.                    the error.  If no help is available, NULL
  577.                    should be used. */
  578.  
  579.     unsigned long dwHelpContext;
  580.                 /* help context of topic within the help file. */
  581.  
  582.     void FAR* pvReserved;
  583.  
  584.     /* Use of this field allows an application to defer filling in
  585.        the bstrDescription, bstrHelpFile, and dwHelpContext fields
  586.        until they are needed.  This field might be used, for example,
  587.        if loading the string for the error is a time-consuming
  588.        operation. If deferred fill-in is not desired, this field should
  589.        be set to NULL. */
  590. #ifdef _MAC
  591. # ifdef _MSC_VER
  592.     HRESULT (STDAPICALLTYPE FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  593. # else
  594.     STDAPICALLTYPE HRESULT (FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  595. # endif
  596. #else
  597.     HRESULT (STDAPICALLTYPE FAR* pfnDeferredFillIn)(struct tagEXCEPINFO FAR*);
  598. #endif
  599.  
  600.     SCODE scode;        /* An SCODE describing the error. */
  601.  
  602. } EXCEPINFO, FAR* LPEXCEPINFO;
  603.  
  604. typedef enum tagCALLCONV {
  605.       CC_CDECL = 1
  606.     , CC_MSCPASCAL
  607.     , CC_PASCAL = CC_MSCPASCAL
  608.     , CC_MACPASCAL
  609.     , CC_STDCALL
  610.     , CC_RESERVED
  611.     , CC_SYSCALL
  612.     , CC_MAX            /* end of enum marker */
  613. #ifdef _MAC
  614.     , CC_FORCELONG = 2147483647
  615. #endif
  616. } CALLCONV;
  617.  
  618. typedef enum tagFUNCKIND {
  619.       FUNC_VIRTUAL
  620.     , FUNC_PUREVIRTUAL
  621.     , FUNC_NONVIRTUAL
  622.     , FUNC_STATIC
  623.     , FUNC_DISPATCH
  624. #ifdef _MAC
  625.     , FUNC_FORCELONG = 2147483647
  626. #endif
  627. } FUNCKIND;
  628.  
  629. /* Flags for IDispatch::Invoke */
  630. #define DISPATCH_METHOD        0x1
  631. #define DISPATCH_PROPERTYGET    0x2
  632. #define DISPATCH_PROPERTYPUT    0x4
  633. #define DISPATCH_PROPERTYPUTREF    0x8
  634.  
  635. typedef enum tagINVOKEKIND {
  636.       INVOKE_FUNC = DISPATCH_METHOD
  637.     , INVOKE_PROPERTYGET = DISPATCH_PROPERTYGET
  638.     , INVOKE_PROPERTYPUT = DISPATCH_PROPERTYPUT
  639.     , INVOKE_PROPERTYPUTREF = DISPATCH_PROPERTYPUTREF
  640. #ifdef _MAC
  641.     , INVOKE_FORCELONG = 2147483647
  642. #endif
  643. } INVOKEKIND;
  644.  
  645. typedef struct FARSTRUCT tagFUNCDESC {
  646.     MEMBERID memid;
  647.     SCODE FAR* lprgscode;
  648.     ELEMDESC FAR* lprgelemdescParam;  /* array of parameter types */
  649.     FUNCKIND funckind;
  650.     INVOKEKIND invkind;
  651.     CALLCONV callconv;
  652.     short cParams;
  653.     short cParamsOpt;
  654.     short oVft;
  655.     short cScodes;
  656.     ELEMDESC elemdescFunc;
  657.     unsigned short wFuncFlags;
  658. } FUNCDESC, FAR* LPFUNCDESC;
  659.  
  660. typedef enum tagVARKIND {
  661.       VAR_PERINSTANCE
  662.     , VAR_STATIC
  663.     , VAR_CONST
  664.     , VAR_DISPATCH
  665. #ifdef _MAC
  666.     , VAR_FORCELONG = 2147483647
  667. #endif
  668. } VARKIND;
  669.  
  670. typedef struct FARSTRUCT tagVARDESC {
  671.     MEMBERID memid;
  672.     TCHAR FAR* lpstrSchema;        /* reserved for future use */
  673.     union {
  674.       /* VAR_PERINSTANCE - the offset of this variable within the instance */
  675.       unsigned long oInst;
  676.  
  677.       /* VAR_CONST - the value of the constant */
  678.       VARIANT FAR* lpvarValue;
  679.  
  680.     }UNION_NAME(u);
  681.     ELEMDESC elemdescVar;
  682.     unsigned short wVarFlags;
  683.     VARKIND varkind;
  684. } VARDESC, FAR* LPVARDESC;
  685.  
  686. typedef enum tagTYPEFLAGS {
  687.       TYPEFLAG_FAPPOBJECT = 1
  688.     , TYPEFLAG_FCANCREATE = 2
  689. #ifdef _MAC
  690.     , TYPEFLAG_FORCELONG  = 2147483647
  691. #endif
  692. } TYPEFLAGS;
  693.  
  694. typedef enum tagFUNCFLAGS {
  695.       FUNCFLAG_FRESTRICTED= 1
  696. #ifdef _MAC
  697.     , FUNCFLAG_FORCELONG  = 2147483647
  698. #endif
  699. } FUNCFLAGS;
  700.  
  701. typedef enum tagVARFLAGS {
  702.       VARFLAG_FREADONLY   = 1
  703. #ifdef _MAC
  704.     , VARFLAG_FORCELONG   = 2147483647
  705. #endif
  706. } VARFLAGS;
  707.  
  708. /* IMPLTYPE Flags */
  709. #define IMPLTYPEFLAG_FDEFAULT        0x1
  710. #define IMPLTYPEFLAG_FSOURCE        0x2
  711. #define IMPLTYPEFLAG_FRESTRICTED    0x4
  712.  
  713. #undef  INTERFACE
  714. #define INTERFACE ITypeInfo
  715.  
  716. DECLARE_INTERFACE_(ITypeInfo, IUnknown)
  717. {
  718.     BEGIN_INTERFACE
  719.  
  720.     /* IUnknown methods */
  721.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  722.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  723.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  724.  
  725.     /* ITypeInfo methods */
  726.     STDMETHOD(GetTypeAttr)(THIS_ TYPEATTR FAR* FAR* pptypeattr) PURE;
  727.  
  728.     STDMETHOD(GetTypeComp)(THIS_ ITypeComp FAR* FAR* pptcomp) PURE;
  729.  
  730.     STDMETHOD(GetFuncDesc)(THIS_
  731.       unsigned int index, FUNCDESC FAR* FAR* ppfuncdesc) PURE;
  732.  
  733.     STDMETHOD(GetVarDesc)(THIS_
  734.       unsigned int index, VARDESC FAR* FAR* ppvardesc) PURE;
  735.  
  736.     STDMETHOD(GetNames)(THIS_
  737.       MEMBERID memid,
  738.       BSTR FAR* rgbstrNames,
  739.       unsigned int cMaxNames,
  740.       unsigned int FAR* pcNames) PURE;
  741.  
  742.     STDMETHOD(GetRefTypeOfImplType)(THIS_
  743.       unsigned int index, HREFTYPE FAR* phreftype) PURE;
  744.  
  745.     STDMETHOD(GetImplTypeFlags)(THIS_
  746.       unsigned int index, int FAR* pimpltypeflags) PURE;
  747.  
  748.     STDMETHOD(GetIDsOfNames)(THIS_
  749.       TCHAR FAR* FAR* rgszNames,
  750.       unsigned int cNames,
  751.       MEMBERID FAR* rgmemid) PURE;
  752.  
  753.     STDMETHOD(Invoke)(THIS_
  754.       void FAR* pvInstance,
  755.       MEMBERID memid,
  756.       unsigned short wFlags,
  757.       DISPPARAMS FAR *pdispparams,
  758.       VARIANT FAR *pvarResult,
  759.       EXCEPINFO FAR *pexcepinfo,
  760.       unsigned int FAR *puArgErr) PURE;
  761.  
  762.     STDMETHOD(GetDocumentation)(THIS_
  763.       MEMBERID memid,
  764.       BSTR FAR* pbstrName,
  765.       BSTR FAR* pbstrDocString,
  766.       unsigned long FAR* pdwHelpContext,
  767.       BSTR FAR* pbstrHelpFile) PURE;
  768.  
  769.     STDMETHOD(GetDllEntry)(THIS_
  770.       MEMBERID memid,
  771.       INVOKEKIND invkind, 
  772.       BSTR FAR* pbstrDllName,
  773.       BSTR FAR* pbstrName,
  774.       unsigned short FAR* pwOrdinal) PURE;
  775.  
  776.     STDMETHOD(GetRefTypeInfo)(THIS_
  777.       HREFTYPE hreftype, ITypeInfo FAR* FAR* pptinfo) PURE;
  778.  
  779.     STDMETHOD(AddressOfMember)(THIS_
  780.       MEMBERID memid, INVOKEKIND invkind, void FAR* FAR* ppv) PURE;
  781.  
  782.     STDMETHOD(CreateInstance)(THIS_
  783.       IUnknown FAR* punkOuter,
  784.       REFIID riid,
  785.       void FAR* FAR* ppvObj) PURE;
  786.  
  787.     STDMETHOD(GetMops)(THIS_ MEMBERID memid, BSTR FAR* pbstrMops) PURE;
  788.  
  789.     STDMETHOD(GetContainingTypeLib)(THIS_
  790.       ITypeLib FAR* FAR* pptlib, unsigned int FAR* pindex) PURE;
  791.  
  792.     STDMETHOD_(void, ReleaseTypeAttr)(THIS_ TYPEATTR FAR* ptypeattr) PURE;
  793.     STDMETHOD_(void, ReleaseFuncDesc)(THIS_ FUNCDESC FAR* pfuncdesc) PURE;
  794.     STDMETHOD_(void, ReleaseVarDesc)(THIS_ VARDESC FAR* pvardesc) PURE;
  795. };
  796.  
  797. typedef ITypeInfo FAR* LPTYPEINFO;
  798.  
  799.  
  800. /*---------------------------------------------------------------------*/
  801. /*                            ITypeComp                                */
  802. /*---------------------------------------------------------------------*/
  803.  
  804. typedef enum tagDESCKIND {
  805.       DESCKIND_NONE = 0
  806.     , DESCKIND_FUNCDESC
  807.     , DESCKIND_VARDESC
  808.     , DESCKIND_TYPECOMP
  809.     , DESCKIND_IMPLICITAPPOBJ
  810.     , DESCKIND_MAX        /* end of enum marker */
  811. #ifdef _MAC
  812.     , DESCKIND_FORCELONG = 2147483647
  813. #endif
  814. } DESCKIND;
  815.  
  816. typedef union tagBINDPTR {
  817.     FUNCDESC FAR* lpfuncdesc;
  818.     VARDESC FAR* lpvardesc;
  819.     ITypeComp FAR* lptcomp;
  820. } BINDPTR, FAR* LPBINDPTR;
  821.  
  822.  
  823. #undef  INTERFACE
  824. #define INTERFACE ITypeComp
  825.  
  826. DECLARE_INTERFACE_(ITypeComp, IUnknown)
  827. {
  828.     BEGIN_INTERFACE
  829.  
  830.     /* IUnknown methods */
  831.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  832.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  833.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  834.  
  835.     /* ITypeComp methods */
  836.     STDMETHOD(Bind)(THIS_
  837.       TCHAR FAR* szName,
  838.       unsigned long lHashVal,
  839.       unsigned short wflags,
  840.       ITypeInfo FAR* FAR* pptinfo,
  841.       DESCKIND FAR* pdesckind,
  842.       BINDPTR FAR* pbindptr) PURE;
  843.  
  844.     STDMETHOD(BindType)(THIS_
  845.       TCHAR FAR* szName,
  846.       unsigned long lHashVal,
  847.       ITypeInfo FAR* FAR* pptinfo,
  848.       ITypeComp FAR* FAR* pptcomp) PURE;
  849. };
  850.  
  851. typedef ITypeComp FAR* LPTYPECOMP;
  852.  
  853.  
  854.  
  855. /*---------------------------------------------------------------------*/
  856. /*                         ICreateTypeLib                              */
  857. /*---------------------------------------------------------------------*/
  858.  
  859.  
  860. #undef  INTERFACE
  861. #define INTERFACE ICreateTypeLib
  862.  
  863. DECLARE_INTERFACE_(ICreateTypeLib, IUnknown)
  864. {
  865.     BEGIN_INTERFACE
  866.  
  867.     /* IUnknown methods */
  868.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  869.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  870.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  871.  
  872.     /* ICreateTypeLib methods */
  873.     STDMETHOD(CreateTypeInfo)(THIS_
  874.       TCHAR FAR* szName,
  875.       TYPEKIND tkind,
  876.       ICreateTypeInfo FAR* FAR* lplpictinfo) PURE;
  877.  
  878.     STDMETHOD(SetName)(THIS_ TCHAR FAR* szName) PURE;
  879.  
  880.     STDMETHOD(SetVersion)(THIS_
  881.       unsigned short wMajorVerNum, unsigned short wMinorVerNum) PURE;
  882.  
  883.     STDMETHOD(SetGuid) (THIS_ REFGUID guid) PURE;
  884.  
  885.     STDMETHOD(SetDocString)(THIS_ TCHAR FAR* szDoc) PURE;
  886.  
  887.     STDMETHOD(SetHelpFileName)(THIS_ TCHAR FAR* szHelpFileName) PURE;
  888.  
  889.     STDMETHOD(SetHelpContext)(THIS_ unsigned long dwHelpContext) PURE;
  890.  
  891.     STDMETHOD(SetLcid)(THIS_ LCID lcid) PURE;
  892.  
  893.     STDMETHOD(SetLibFlags)(THIS_ unsigned int uLibFlags) PURE;
  894.  
  895.     STDMETHOD(SaveAllChanges)(THIS) PURE;
  896. };
  897.  
  898. typedef ICreateTypeLib FAR* LPCREATETYPELIB;
  899.  
  900.  
  901.  
  902. /*---------------------------------------------------------------------*/
  903. /*                         ICreateTypeInfo                             */
  904. /*---------------------------------------------------------------------*/
  905.  
  906. #undef  INTERFACE
  907. #define INTERFACE ICreateTypeInfo
  908.  
  909. DECLARE_INTERFACE_(ICreateTypeInfo, IUnknown)
  910. {
  911.     BEGIN_INTERFACE
  912.  
  913.     /* IUnknown methods */
  914.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  915.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  916.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  917.  
  918.     /* ICreateTypeInfo methods */
  919.     STDMETHOD(SetGuid)(THIS_ REFGUID guid) PURE;
  920.  
  921.     STDMETHOD(SetTypeFlags)(THIS_ unsigned int uTypeFlags) PURE;
  922.  
  923.     STDMETHOD(SetDocString)(THIS_ TCHAR FAR* pstrDoc) PURE;
  924.  
  925.     STDMETHOD(SetHelpContext)(THIS_ unsigned long dwHelpContext) PURE;
  926.  
  927.     STDMETHOD(SetVersion)(THIS_
  928.       unsigned short wMajorVerNum, unsigned short wMinorVerNum) PURE;
  929.  
  930.     STDMETHOD(AddRefTypeInfo)(THIS_
  931.       ITypeInfo FAR* ptinfo, HREFTYPE FAR* phreftype) PURE;
  932.  
  933.     STDMETHOD(AddFuncDesc)(THIS_
  934.       unsigned int index, FUNCDESC FAR* pfuncdesc) PURE;
  935.  
  936.     STDMETHOD(AddImplType)(THIS_
  937.       unsigned int index, HREFTYPE hreftype) PURE;
  938.  
  939.     STDMETHOD(SetImplTypeFlags)(THIS_
  940.       unsigned int index, int impltypeflags) PURE;
  941.  
  942.     STDMETHOD(SetAlignment)(THIS_ unsigned short cbAlignment) PURE;
  943.  
  944.     STDMETHOD(SetSchema)(THIS_ TCHAR FAR* lpstrSchema) PURE;
  945.  
  946.     STDMETHOD(AddVarDesc)(THIS_
  947.       unsigned int index, VARDESC FAR* pvardesc) PURE;
  948.  
  949.     STDMETHOD(SetFuncAndParamNames)(THIS_
  950.       unsigned int index, TCHAR FAR* FAR* rgszNames, unsigned int cNames) PURE;
  951.  
  952.     STDMETHOD(SetVarName)(THIS_
  953.       unsigned int index, TCHAR FAR* szName) PURE;
  954.  
  955.     STDMETHOD(SetTypeDescAlias)(THIS_
  956.       TYPEDESC FAR* ptdescAlias) PURE;
  957.  
  958.     STDMETHOD(DefineFuncAsDllEntry)(THIS_
  959.       unsigned int index, TCHAR FAR* szDllName, TCHAR FAR* szProcName) PURE;
  960.  
  961.     STDMETHOD(SetFuncDocString)(THIS_
  962.       unsigned int index, TCHAR FAR* szDocString) PURE;
  963.  
  964.     STDMETHOD(SetVarDocString)(THIS_
  965.       unsigned int index, TCHAR FAR* szDocString) PURE;
  966.  
  967.     STDMETHOD(SetFuncHelpContext)(THIS_
  968.       unsigned int index, unsigned long dwHelpContext) PURE;
  969.  
  970.     STDMETHOD(SetVarHelpContext)(THIS_
  971.       unsigned int index, unsigned long dwHelpContext) PURE;
  972.  
  973.     STDMETHOD(SetMops)(THIS_
  974.       unsigned int index, BSTR bstrMops) PURE;
  975.  
  976.     STDMETHOD(SetTypeIdldesc)(THIS_
  977.       IDLDESC FAR* pidldesc) PURE;
  978.  
  979.     STDMETHOD(LayOut)(THIS) PURE;
  980. };
  981.  
  982. typedef ICreateTypeInfo FAR* LPCREATETYPEINFO;
  983.  
  984.  
  985.  
  986. /*---------------------------------------------------------------------*/
  987. /*                         TypeInfo APIs                               */
  988. /*---------------------------------------------------------------------*/
  989. /* compute a 32bit hash value for the given name  based on the lcid and system kind
  990.  */
  991. STDAPI_(unsigned long)
  992. LHashValOfNameSys(SYSKIND syskind, LCID lcid, TCHAR FAR* szName);
  993.  
  994. /* Macro to compute a 32bit hash value for the given name based on the LCID
  995.  */
  996. #ifdef _MAC
  997. #define LHashValOfName(lcid, szName) \
  998.     LHashValOfNameSys(SYS_MAC, lcid, szName)
  999. #else
  1000. #define LHashValOfName(lcid, szName) \
  1001.     LHashValOfNameSys(SYS_WIN32, lcid, szName)
  1002. #endif
  1003.  
  1004. /* compute a 16bit hash value from 32 bit hash value
  1005.  */
  1006. #define WHashValOfLHashVal(lhashval) \
  1007.      ((unsigned short) (0x0000ffff & (lhashval)))
  1008.  
  1009. /* Check if the hash values are compatible.
  1010. */
  1011. #define IsHashValCompatible(lhashval1, lhashval2) \
  1012.     ((BOOL) ((0x00ff0000 & (lhashval1)) == (0x00ff0000 & (lhashval2))))
  1013.  
  1014. /* load the typelib from the file with the given filename
  1015.  */
  1016. STDAPI
  1017. LoadTypeLib(TCHAR FAR* szFile, ITypeLib FAR* FAR* pptlib);
  1018.  
  1019. /* load registered typelib
  1020.  */
  1021. STDAPI
  1022. LoadRegTypeLib(
  1023.     REFGUID rguid,
  1024.     unsigned short wVerMajor,
  1025.     unsigned short wVerMinor,
  1026.     LCID lcid,
  1027.     ITypeLib FAR* FAR* pptlib);
  1028.  
  1029. /* get path to registered typelib
  1030.  */
  1031. STDAPI
  1032. QueryPathOfRegTypeLib(
  1033.     REFGUID guid,
  1034.     unsigned short wMaj,
  1035.     unsigned short wMin,
  1036.     LCID lcid,
  1037.     LPBSTR lpbstrPathName);
  1038.  
  1039. /* add typelib to registry
  1040.  */
  1041. STDAPI
  1042. RegisterTypeLib(
  1043.     ITypeLib FAR* ptlib,
  1044.     TCHAR FAR* szFullPath,
  1045.     TCHAR FAR* szHelpDir);
  1046.  
  1047. STDAPI
  1048. CreateTypeLib(SYSKIND syskind, LPSTR szFile, ICreateTypeLib FAR* FAR* ppctlib);
  1049.  
  1050.  
  1051.  
  1052. /*---------------------------------------------------------------------*/
  1053. /*                          IEnumVARIANT                               */
  1054. /*---------------------------------------------------------------------*/
  1055.  
  1056. #undef  INTERFACE
  1057. #define INTERFACE IEnumVARIANT
  1058.  
  1059. DECLARE_INTERFACE_(IEnumVARIANT, IUnknown)
  1060. {
  1061.     BEGIN_INTERFACE
  1062.  
  1063.     /* IUnknown methods */
  1064.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1065.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1066.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1067.  
  1068.     /* IEnumVARIANT methods */
  1069.     STDMETHOD(Next)(
  1070.       THIS_ unsigned long celt, VARIANT FAR* rgvar, unsigned long FAR* pceltFetched) PURE;
  1071.     STDMETHOD(Skip)(THIS_ unsigned long celt) PURE;
  1072.     STDMETHOD(Reset)(THIS) PURE;
  1073.     STDMETHOD(Clone)(THIS_ IEnumVARIANT FAR* FAR* ppenum) PURE;
  1074. };
  1075.  
  1076. typedef IEnumVARIANT FAR* LPENUMVARIANT;
  1077.  
  1078.  
  1079. /*---------------------------------------------------------------------*/
  1080. /*                             IDispatch                               */
  1081. /*---------------------------------------------------------------------*/
  1082.  
  1083.  
  1084. #undef  INTERFACE
  1085. #define INTERFACE IDispatch
  1086.  
  1087. DECLARE_INTERFACE_(IDispatch, IUnknown)
  1088. {
  1089.     BEGIN_INTERFACE
  1090.  
  1091.     /* IUnknown methods */
  1092.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  1093.     STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  1094.     STDMETHOD_(unsigned long, Release)(THIS) PURE;
  1095.  
  1096.     /* IDispatch methods */
  1097.     STDMETHOD(GetTypeInfoCount)(THIS_ unsigned int FAR* pctinfo) PURE;
  1098.  
  1099.     STDMETHOD(GetTypeInfo)(
  1100.       THIS_
  1101.       unsigned int itinfo,
  1102.       LCID lcid,
  1103.       ITypeInfo FAR* FAR* pptinfo) PURE;
  1104.  
  1105.     STDMETHOD(GetIDsOfNames)(
  1106.       THIS_
  1107.       REFIID riid,
  1108.       TCHAR FAR* FAR* rgszNames,
  1109.       unsigned int cNames,
  1110.       LCID lcid,
  1111.       DISPID FAR* rgdispid) PURE;
  1112.  
  1113.     STDMETHOD(Invoke)(
  1114.       THIS_
  1115.       DISPID dispidMember,
  1116.       REFIID riid,
  1117.       LCID lcid,
  1118.       unsigned short wFlags,
  1119.       DISPPARAMS FAR* pdispparams,
  1120.       VARIANT FAR* pvarResult,
  1121.       EXCEPINFO FAR* pexcepinfo,
  1122.       unsigned int FAR* puArgErr) PURE;
  1123. };
  1124.  
  1125. typedef IDispatch FAR* LPDISPATCH;
  1126.  
  1127.  
  1128. /* DISPID reserved for the standard "value" property */
  1129. #define DISPID_VALUE    0
  1130.  
  1131. /* DISPID reserved to indicate an "unknown" name */
  1132. #define DISPID_UNKNOWN    -1
  1133.  
  1134. /* The following DISPID is reserved to indicate the param
  1135.  * that is the right-hand-side (or "put" value) of a PropertyPut
  1136.  */
  1137. #define DISPID_PROPERTYPUT -3
  1138.  
  1139. /* DISPID reserved for the standard "NewEnum" method */
  1140. #define DISPID_NEWENUM    -4
  1141.  
  1142. /* DISPID reserved for the standard "Evaluate" method */
  1143. #define DISPID_EVALUATE    -5
  1144.  
  1145.  
  1146. /*---------------------------------------------------------------------*/
  1147. /*                   IDispatch implementation support                  */
  1148. /*---------------------------------------------------------------------*/
  1149.  
  1150. typedef struct FARSTRUCT tagPARAMDATA {
  1151.     TCHAR FAR* szName;        /* parameter name */
  1152.     VARTYPE vt;            /* parameter type */
  1153. } PARAMDATA, FAR* LPPARAMDATA;
  1154.  
  1155. typedef struct FARSTRUCT tagMETHODDATA {
  1156.     TCHAR FAR* szName;        /* method name */
  1157.     PARAMDATA FAR* ppdata;    /* pointer to an array of PARAMDATAs */
  1158.     DISPID dispid;        /* method ID */
  1159.     unsigned int iMeth;        /* method index */
  1160.     CALLCONV cc;        /* calling convention */
  1161.     unsigned int cArgs;        /* count of arguments */
  1162.     unsigned short wFlags;    /* same wFlags as on IDispatch::Invoke() */
  1163.     VARTYPE vtReturn;
  1164. } METHODDATA, FAR* LPMETHODDATA;
  1165.  
  1166. typedef struct FARSTRUCT tagINTERFACEDATA {
  1167.     METHODDATA FAR* pmethdata;    /* pointer to an array of METHODDATAs */
  1168.     unsigned int cMembers;    /* count of members */
  1169. } INTERFACEDATA, FAR* LPINTERFACEDATA;
  1170.  
  1171.  
  1172.  
  1173. /* Locate the parameter indicated by the given position, and
  1174.  * return it coerced to the given target VARTYPE (vtTarg).
  1175.  */
  1176. STDAPI
  1177. DispGetParam(
  1178.     DISPPARAMS FAR* pdispparams,
  1179.     unsigned int position,
  1180.     VARTYPE vtTarg,
  1181.     VARIANT FAR* pvarResult,
  1182.     unsigned int FAR* puArgErr);
  1183.  
  1184. /* Automatic TypeInfo driven implementation of IDispatch::GetIDsOfNames()
  1185.  */ 
  1186. STDAPI
  1187. DispGetIDsOfNames(
  1188.     ITypeInfo FAR* ptinfo,
  1189.     TCHAR FAR* FAR* rgszNames,
  1190.     unsigned int cNames,
  1191.     DISPID FAR* rgdispid);
  1192.  
  1193. /* Automatic TypeInfo driven implementation of IDispatch::Invoke()
  1194.  */
  1195. STDAPI
  1196. DispInvoke(
  1197.     void FAR* _this,
  1198.     ITypeInfo FAR* ptinfo,
  1199.     DISPID dispidMember,
  1200.     unsigned short wFlags,
  1201.     DISPPARAMS FAR* pparams,
  1202.     VARIANT FAR* pvarResult,
  1203.     EXCEPINFO FAR* pexcepinfo,
  1204.     unsigned int FAR* puArgErr);
  1205.  
  1206. /* Construct a TypeInfo from an interface data description
  1207.  */
  1208. STDAPI
  1209. CreateDispTypeInfo(
  1210.     INTERFACEDATA FAR* pidata,
  1211.     LCID lcid,
  1212.     ITypeInfo FAR* FAR* pptinfo);
  1213.  
  1214. /* Create an instance of the standard TypeInfo driven IDispatch
  1215.  * implementation.
  1216.  */
  1217. STDAPI
  1218. CreateStdDispatch(
  1219.     IUnknown FAR* punkOuter,
  1220.     void FAR* pvThis,
  1221.     ITypeInfo FAR* ptinfo,
  1222.     IUnknown FAR* FAR* ppunkStdDisp);
  1223.  
  1224.  
  1225.  
  1226. /*---------------------------------------------------------------------*/
  1227. /*                    Active Object Registration API                   */
  1228. /*---------------------------------------------------------------------*/
  1229.  
  1230. STDAPI
  1231. RegisterActiveObject(
  1232.     IUnknown FAR* punk,
  1233.     REFCLSID rclsid,
  1234.     void FAR* pvReserved,
  1235.     unsigned long FAR* pdwRegister);
  1236.  
  1237. STDAPI
  1238. RevokeActiveObject(
  1239.     unsigned long dwRegister,
  1240.     void FAR* pvReserved);
  1241.  
  1242. STDAPI
  1243. GetActiveObject(
  1244.     REFCLSID rclsid,
  1245.     void FAR* pvReserved,
  1246.     IUnknown FAR* FAR* ppunk);
  1247.  
  1248.  
  1249. #undef UNION_NAME
  1250.  
  1251. #endif /* _DISPATCH_H_ */
  1252.